home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / css / source / pseude.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-19  |  32.4 KB  |  940 lines

  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <glib.h>
  5. #include <strlib.h>
  6. #include "land.h"
  7.  
  8. /* #include "..\lib.h" */
  9.  
  10. void colbox(int x, int y, int col)
  11. {
  12.      line(x, y, x+15, y+15, PSET, col,  2, 0xffff);
  13.      line(x, y, x+15, y+15, PSET, col0, 1, 0xffff);
  14. }
  15.  
  16. void psmsgcls()
  17. {
  18.    line(80+1, 290+21, 560-1, 360-1, PSET, col7, 2, 0xffff);
  19. }
  20.  
  21. void pseudemsg2(char *msg1, char *msg2)
  22. {
  23.    line( 80+1,290+21, 560-1, 360-1, PSET, col7, 2, 0xffff);
  24.    msgset(96, 315, msg1, col0);
  25.    msgset(96, 335, msg2, col0);
  26. }
  27.  
  28. void pseudemsg(int com, int sw)
  29. {
  30.    char hmsg1[80], hmsg2[80];
  31.    int col;
  32.  
  33.    hmsg1[0] = '\0'; hmsg2[0] = '\0';
  34.  
  35.    if (com == 1) {
  36.       strcpy(hmsg1, "色数を設定してください。(2~16色)");
  37.    }
  38.  
  39.    if (com == 2 || com == 3) {
  40.       strcpy(hmsg1, "右側のウィンドウから色を選んでください。");
  41.    }
  42.    
  43.    if (com == 8 || com == 9 || com == 10) {
  44.       strcpy(hmsg1, "色、レベル、作業領域を設定してください。");
  45.       strcpy(hmsg2, "設定は ○、□、数字の部分をそれぞれ指定してください。");
  46.    }
  47.  
  48.    if (com == 12) {
  49.       strcpy(hmsg1, "メイン・メニューにもどります。");
  50.    }
  51.  
  52.    if (sw == 0) col = col7;
  53.    else         col = col0;
  54.  
  55.    msgset(96, 315, hmsg1, col);
  56.    msgset(96, 335, hmsg2, col);
  57. }
  58.  
  59. void levelset(int coln, int th[17][2], int sw)
  60. {
  61. int i, col, cx, cy;
  62. char swk[10];
  63.  
  64.       sprintf(swk, "< %3d", th[0][0]);
  65.       symbol(118, 257, swk, 1,1, col10, 0 ,PSET);
  66.  
  67.       for (i = 0; i < coln;  i++) {
  68.          if (i < coln-1) col = col0;
  69.          else            col = col10;
  70.          sprintf(swk, "< %3d", th[i+1][0]);
  71.          if (i < 8) {
  72.             if (sw == 1) colbox(100,  245-i*20, i);
  73.             cx = 118; cy = 237-i*20;
  74.          } else {
  75.             if (sw == 1) colbox(180, 245+160-i*20, i);
  76.             cx = 198; cy = 237+160-i*20;
  77.          }
  78.          line(cx-1, cy-1, cx+45, cy+9, PSET, col7, 2, 0xffff);
  79.          symbol(cx, cy, swk, 1,1, col, 0 ,PSET);
  80.       }
  81. }
  82.  
  83.  
  84. int colnset(int coln, int th[17][2])
  85. {
  86. int mosx = 270, mosy = 100, coln2, i;
  87. double   wa;
  88.    
  89.    if (calc( &mosx, &mosy, &wa) == 0) coln2 = coln;
  90.    else                               coln2 = wa;
  91.    if (coln2 < 2) coln2 = 2;
  92.    if (coln2 >16) coln2 = 16;
  93.    if (coln != coln2) {
  94.       for (i = 0; i < coln2; i++) {
  95.          th[i][0] = 256*i/coln2; th[i][1] = 256*(i+1)/coln2-1;
  96.       }
  97.       th[coln2][0] = 256; th[coln2][1] = 0;
  98.       line(90+1, 63+21, 250-1, 268-1, PSET, col7, 2, 0xffff);
  99.       levelset(coln2, th, 1);
  100.    }   
  101.    return(coln2);
  102. }
  103.  
  104. void colchg(int cx, int cy, int *cl)
  105. {
  106. unsigned  ddadr[2];
  107. unsigned char page;
  108. char      buf[11279]; /* (110*205+7)/8*4 */
  109. int x, y;
  110. int mx, my, i, j;
  111. int cx2, cy2;
  112.  
  113.    x = 270; y = 80;
  114.    page = 0;
  115.    BSETDATAADR(ddadr,  buf);
  116.    GDS_getBlock(ddadr[0],  ddadr[1],  page, x, y, x+109, y+204);
  117.  
  118.    helpbox( x, y, x+100, y+190, "色の種類");
  119.    for (i = 0; i < 8;  i++) {
  120.       colbox(x+20, y+195-23-i*20, i);
  121.       colbox(x+60, y+195-23-i*20, i+8);
  122.    }
  123.    while(1) {
  124.       while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  125.       for (i = 0; i < 8;  i++) {
  126.          cx2 = x+20; cy2 = y+195-23-i*20; j = 0;
  127.          if (xychk16(mx, my, cx2, cy2) == 1) break;
  128.          cx2 = x+60; j = 8;
  129.          if (xychk16(mx, my, cx2, cy2) == 1) break;
  130.          cx2 = 0;
  131.       }
  132.       if (cx2 != 0) {
  133.          line(cx2-1, cy2-1, cx2+16, cy2+16, PSET, col14, 1, 0xffff);
  134.          while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  135.          if (xychk16(mx, my, cx2, cy2) == 1) {
  136.             *cl = i + j;
  137.             colbox(cx, cy, *cl);
  138.             break;
  139.          }
  140.          line(cx2-1, cy2-1, cx2+16, cy2+16, PSET, col7,  1, 0xffff);
  141.       }
  142.    }
  143.    GDS_putBlock(ddadr[0],  ddadr[1],  page, x,  y, x+109, y+204, PSET);
  144.    return;
  145. }
  146.  
  147. void levelchg(int cx, int cy, int coln, int th[17][2], int leveln)
  148. {
  149. int mosx = 260, mosy = 100, maxlv, minlv;
  150. char    ws2[80];
  151. double  wa = 0;
  152. int     wi = 0, i;
  153.  
  154.    ws2[0] = '\0';
  155.    while(1) {
  156.       if (coln == 2) {
  157.          maxlv = 255;
  158.          minlv = 1;
  159.          break;
  160.       }
  161.       if (leveln == 0) {
  162.          maxlv = th[coln-1][0] - (coln-2);
  163.          minlv = 1;
  164.          break;
  165.       }
  166.       if (leveln == coln -2 ) {
  167.          maxlv = 255;
  168.          minlv = th[1][0] + (coln-2);
  169.          break;
  170.       }
  171.       maxlv = th[leveln+2][0]-1;
  172.       minlv = th[leveln][0]+1;
  173.       break;
  174.    }
  175.    psmsgcls();
  176.    sprintf(ws2, "レベル設定範囲 [%d~%d]", minlv, maxlv);
  177.    pseudemsg2("レベルを設定してください。", ws2);
  178.  
  179.    if (calc( &mosx, &mosy, &wa) == 1) {
  180.       wi = wa;
  181.       if (wi < minlv) wi = minlv;
  182.       if (wi > maxlv) wi = maxlv;
  183.       while(1) {
  184.          if (coln == 2) {
  185.             th[0][1] = wi - 1;
  186.             th[1][0] = wi;
  187.             break;
  188.          }
  189.          if (leveln == 0) {
  190.             th[1][0] = wi;
  191.             th[0][1] = th[1][0] - 1;
  192.             for (i = 2; i < coln-1; i++) {
  193.                th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
  194.                th[i-1][1] = th[i][0] - 1;
  195.             }
  196.             th[coln-2][1] = th[coln-1][0]-1;
  197.             break;
  198.          }
  199.          if (leveln == coln -2 ) {
  200.             th[coln-1][0] = wi;
  201.             for (i = 2; i < coln-1; i++) {
  202.                th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
  203.                th[i-1][1] = th[i][0] - 1;
  204.             }
  205.             th[coln-2][1] = th[coln-1][0]-1;
  206.             break;
  207.          }
  208.          th[leveln+1][0] = wi;
  209.          th[leveln][1] = th[leveln+1][0] - 1;
  210.          break;
  211.       }
  212.       levelset(coln, th, 0);
  213.       /* th level print for debug *
  214.       Locate(0,0); Color(2);
  215.       for (i = 0; i <= coln; i++) {
  216.          printf("col= %d-%d    \n", th[i][0], th[i][1]);
  217.       }
  218.       Color(7);
  219.       * end for denug */
  220.    }
  221.    psmsgcls();
  222.    return;
  223. }
  224.  
  225. int chgbox( int mx, int my, int *bx2, int *by2, int *xsiz2, int *ysiz2)
  226. {
  227. int  boxcom = -1;
  228. int  x, y, xsiz, ysiz, wx, wy, x1, y1, x2, y2;
  229. char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4,  (400*1+7)/8*4  */
  230. unsigned  ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
  231. unsigned char page = 0;
  232.  
  233.      x = *bx2; y = *by2; xsiz = *xsiz2; ysiz = *ysiz2;
  234.  
  235.      if (xychk( mx, my, x+xsiz-4, y+ysiz-4, x+xsiz+2, y+ysiz+2) == 1) { /* 枠変更 */
  236.         MOS_horizon(x+5, 511);
  237.         MOS_vertical(y+5, 399);
  238.         boxcom = 0;
  239.      }
  240.      if (xychk( mx, my, x+xsiz-4, y-3, x+xsiz+2, y+3) == 1) { /* 枠変更 */
  241.         MOS_horizon(x+5, 511);
  242.         MOS_vertical(0, y+ysiz-5);
  243.         boxcom = 1;
  244.      }
  245.      if (xychk( mx, my, x-3, y-3, x+3, y+3) == 1) { /* 枠変更 */
  246.         MOS_horizon(0, x+xsiz-5);
  247.         MOS_vertical(0, y+ysiz-5);
  248.         boxcom = 2;
  249.      }
  250.      if (xychk( mx, my, x-3, y+ysiz-4, x+3, y+ysiz+2) == 1) { /* 枠変更 */
  251.         MOS_horizon(0, x+xsiz-5);
  252.         MOS_vertical(y+5, 399);
  253.         boxcom = 3;
  254.      }
  255.      if (xychk( mx, my, x+xsiz-4, y+3, x+xsiz+2, y+ysiz-4) == 1) { /* 枠変更 */
  256.         MOS_horizon(x+5, 511);
  257.         MOS_vertical(my, my);
  258.         boxcom = 10;
  259.      }
  260.      if (xychk( mx, my, x+3, y-3, x+xsiz-4, y+3) == 1) { /* 枠変更 */
  261.         MOS_horizon(mx, mx);
  262.         MOS_vertical(0, y+ysiz-5);
  263.         boxcom = 11;
  264.      }
  265.      if (xychk( mx, my, x-3, y+3, x+3, y+ysiz-4) == 1) { /* 枠変更 */
  266.         MOS_horizon(0, x+xsiz-5);
  267.         MOS_vertical(my, my);
  268.         boxcom = 12;
  269.      }
  270.      if (xychk( mx, my, x+3, y+ysiz-4, x+xsiz-4, y+ysiz+2) == 1) { /* 枠変更 */
  271.         MOS_horizon(mx, mx);
  272.         MOS_vertical(y+5, 399);
  273.         boxcom = 13;
  274.      }
  275.      if (boxcom == -1) return(0);
  276.      mcu2();
  277.      /* ボックスサイズ変更 */
  278.      BSETDATAADR(ddadr1x, buf1x);
  279.      BSETDATAADR(ddadr2x, buf2x);
  280.      BSETDATAADR(ddadr1y, buf1y);
  281.      BSETDATAADR(ddadr2y, buf2y);
  282.  
  283.      GDS_getBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y);
  284.      GDS_getBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1);
  285.      GDS_getBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2);
  286.      GDS_getBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2);
  287.      line(x, y, x+xsiz-1, y+ysiz-1, PSET, col8, 1, 0xffff);
  288.      
  289.      x1 = x; y1 = y; x2 = x + xsiz - 1; y2 = y + ysiz - 1;
  290.      while ((MOS_rdpos(&wx, &wy) & 0x01) == 1) {
  291.         if (wx != mx || wy != my) {
  292.            mx = wx; my = wy;
  293.            switch (boxcom) {
  294.            case  0 : x2 = wx; y2 = wy; break;
  295.            case  1 : x2 = wx; y1 = wy; break;
  296.            case  2 : x1 = wx; y1 = wy; break;
  297.            case  3 : x1 = wx; y2 = wy; break;
  298.            case 10 : x2 = wx; break;
  299.            case 11 : y1 = wy; break;
  300.            case 12 : x1 = wx; break;
  301.            case 13 : y2 = wy; break;
  302.            default : break;
  303.            }
  304.            GDS_putBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y, PSET);
  305.            GDS_putBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1, PSET);
  306.            GDS_putBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2, PSET);
  307.            GDS_putBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2, PSET);
  308.            x = x1; y = y1; xsiz = x2 - x1 + 1; ysiz = y2 - y1 + 1;
  309.            GDS_getBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y);
  310.            GDS_getBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1);
  311.            GDS_getBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2);
  312.            GDS_getBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2);
  313.            line(x, y, x+xsiz-1, y+ysiz-1, PSET, col8, 1, 0xffff);
  314.         }
  315.      }
  316.      GDS_putBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y, PSET);
  317.      GDS_putBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1, PSET);
  318.      GDS_putBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2, PSET);
  319.      GDS_putBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2, PSET);
  320.      /* ボックスサイズ変更終了 */
  321.      MOS_horizon(0, 639);
  322.      MOS_vertical(0, 399);
  323.      mcu1();
  324.      *bx2 = x; *by2 = y; *xsiz2 = xsiz; *ysiz2 = ysiz;
  325.      return(1);
  326. }
  327.  
  328. void areacalc( int typ, int warea, int lin, int pixel, int coln, int cl[], int th[][2])
  329. {
  330. char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4,  (400*1+7)/8*4  */
  331. unsigned  ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
  332. unsigned  char page, sPage, dPage;
  333. unsigned  ddadr[2];
  334. char      buf[18054]; /* (95*380+7)/8*4 */
  335. int  mx, my, mosx=350, mosy=100;
  336. int  mex=512, mey= 25; /* sub menu */
  337. int  siz=2, ret;
  338. char wstr[20];
  339. double  wa;
  340. int  bx=128, by=100, bx2, by2, xsiz=256, ysiz=200, xsiz2, ysiz2;
  341. int  i, j, kx, ky, m, n, com = 1;
  342. int  cx, cy, col;
  343. unsigned char colcvt[256];
  344. long          colcnt[16];
  345. unsigned char huge *WPTR;
  346.  
  347.    BSETDATAADR(ddadr,  buf); /* address set */
  348.  
  349.    BSETDATAADR(ddadr1x, buf1x);
  350.    BSETDATAADR(ddadr2x, buf2x);
  351.    BSETDATAADR(ddadr1y, buf1y);
  352.    BSETDATAADR(ddadr2y, buf2y);
  353.  
  354.    GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  355.    GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  356.    GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  357.    GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  358.    line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  359.  
  360.    while(1) {
  361.      if (com == 1) {
  362.         com  = 0;
  363.         page = 0;
  364.         GDS_getBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171);
  365.         if (typ == 0) helpbox( mex, mey, mex+120, mey+160, "面積計算");
  366.         else          helpbox( mex, mey, mex+120, mey+160, "ヒストグラム\x095\x05c示");
  367.                                                                     /* 表 */
  368.         msgset( mex+5, mey+30, "枠内ドラッグで", col0);
  369.         msgset( mex+5, mey+50, "位置移動", col0);
  370.         msgset( mex+5, mey+70, "枠ドラッグで", col0);
  371.         msgset( mex+5, mey+90, "大きさ変更", col0);
  372.         line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
  373.         sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  374.         msgset2(mex+16, mey+110, wstr, col0);
  375.         sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  376.         msgset2(mex+16, mey+120, wstr, col0);
  377.         recogmsg(mex+30,  mey+135, col0);
  378.         mousemsg( mex+70, mey+135, "終了", col0);
  379.      }
  380.      
  381.      while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  382.      if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) { com = 0; continue; }
  383.  
  384.      bx2 = bx; by2 = by; xsiz2 = xsiz; ysiz2 = ysiz;
  385.      if (chgbox( mx, my, &bx2, &by2, &xsiz2, &ysiz2) != 0) { /* ボックスの大きさ変更 */
  386.         com = 0;
  387.         GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  388.         GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  389.         GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  390.         GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  391.         bx = bx2; by = by2; xsiz = xsiz2; ysiz = ysiz2;
  392.         GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  393.         GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  394.         GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  395.         GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  396.         line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  397.         mcu1();
  398.         line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
  399.         sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  400.         msgset2(mex+16, mey+110, wstr, col0);
  401.         sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  402.         msgset2(mex+16, mey+120, wstr, col0);
  403.         continue;
  404.      }
  405.      if (xychk( mx, my, bx, by, bx+xsiz-1, by+ysiz-1) == 1) { /* ボックス移動 */
  406.         com = 0;
  407.         MOS_horizon(mx-bx, 511-((bx+xsiz-1)-mx));
  408.         MOS_vertical(my-by, 399-((by+ysiz-1)-my));
  409.         mcu3();
  410.         bx2 = bx; by2 = by;
  411.         movbox(&bx2, &by2, xsiz, ysiz, mx-bx, my-by);
  412.         GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  413.         GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  414.         GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  415.         GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  416.         bx = bx2; by = by2;
  417.         GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
  418.         GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
  419.         GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
  420.         GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
  421.         line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
  422.         MOS_horizon(0, 639);
  423.         MOS_vertical(0, 399);
  424.         mcu1();
  425.         line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
  426.         sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
  427.         msgset2(mex+16, mey+110, wstr, col0);
  428.         sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
  429.         msgset2(mex+16, mey+120, wstr, col0);
  430.         continue;
  431.      }
  432.      if (xychk(mx, my, mex+70, mey+135, mex+70+32, mey+135+16) == 1) {
  433.         com = 0;
  434.         mousemsg( mex+70, mey+135, "終了", -1);
  435.         while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  436.         if (xychk(mx, my, mex+70, mey+135, mex+70+32, mey+135+16) == 1) {
  437.            break;
  438.         }
  439.         mousemsg( mex+70, mey+135, "終了", col0);
  440.         continue;
  441.      }
  442.      if (recogin2( mx, my, mex+30, mey+135, 0) == 1) { /* 実行 */
  443.       if(typ == 0) {
  444.         com = 1;
  445.         /* clear color counter */
  446.         for (i = 0; i < 16; i++) colcnt[i] = 0;
  447.         /* color table set */
  448.         for (i = 0; i < coln; i++) {
  449.            for (j = th[i][0]; j <= th[i][1]; j++) colcvt[j] = i;
  450.         }
  451.         /* color count */
  452.         for (j = by; j < by+ysiz; j++) {
  453.            /* printf("%d\n", j); デバッグ用 */
  454.            WPTR = WAREA + 512L * j + bx;
  455.            /*                                                           ここにバグがある?。               
  456.            for (i = bx; i < bx+xsiz; i++) colcnt[colcvt[(unsigned char huge)*(WPTR++)]]++;
  457.            */
  458.            for (i = bx; i < bx+xsiz; i++) colcnt[colcvt[*WPTR]]++;
  459.            WPTR++;
  460.  
  461.         }
  462.         /* メニューの消去 */
  463.         page = 0;
  464.         GDS_putBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171, PSET);
  465.  
  466.         GDS_getBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+94, mey+379);
  467.         helpbox( mex, mey, mex+88, mey+355, "面積計算");
  468.         
  469.         sprintf(wstr, "<%3d", th[0][0]);
  470.         symbol(mex+23, mey+20-5+18*(coln+1), wstr, 1,1, col10, 0 ,PSET);
  471.         for (i = 0; i < coln; i++) {
  472.            colbox(mex+5, mey+20+18*(coln-i), cl[i]);
  473.            if (i < coln-1) col = col0;
  474.            else            col = col10;
  475.            cx = mex+23; cy = mey+20-5+18*(coln-i);
  476.            sprintf(wstr, "<%3d", th[i+1][0]);
  477.            symbol(cx, cy, wstr, 1,1, col, 0 ,PSET);
  478.            sprintf(wstr, "%6ld", colcnt[i]);
  479.            symbol(mex+31, mey+20+4+18*(coln-i), wstr, 1, 1, col13, 0, PSET);
  480.         }
  481.         recogmsg(mex+30,  mey+335, col0);
  482.  
  483.         while (1) { 
  484.            while ((MOS_rdpos(&mx, &my) & 0x01) == 0); /* 確認 */
  485.            if (xychk(mx, my, mex+30, mey+335, mex+70+32, mey+335+16) == 1) {
  486.               recogmsg(mex+30,  mey+335, -1);
  487.               while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  488.               if (xychk(mx, my, mex+30, mey+335, mex+30+32, mey+335+16) == 1) {
  489.                  GDS_putBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+94, mey+379, PSET);
  490.                  break;
  491.               }
  492.               recogmsg(mex+30,  mey+335, col0);
  493.               continue;
  494.            }
  495.         }
  496.       } else {
  497.          /* ヒストグラム表示 */
  498.          histgram2( warea, lin+by/ypixel, pixel+bx/xpixel, ysiz/ypixel, xsiz/xpixel);
  499.          recogmsg( mex+30, mey+135, col0);
  500.          continue;
  501.       }
  502.      }
  503.      /* 裏画面表示 */
  504.      backexp(mx, my,  630, 0, 639, 20);
  505.      continue;
  506.    }
  507.    /*
  508.    while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  509.    while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  510.    */
  511.  
  512.    /* ボックスの消去 */
  513.    GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
  514.    GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
  515.    GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
  516.    GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
  517.    /* メニューの消去 */
  518.    GDS_putBlock(ddadr[0],  ddadr[1],  page, mex,  mey, mex+127, mey+171, PSET);
  519. }
  520.  
  521.  
  522. /* return( command ) */
  523. int pseude2menu( int com)
  524. {
  525. unsigned  ddadr[2];
  526. unsigned  char page;
  527. char buf[30175]; /* (397*152+7)/8*4 */
  528. int x, y, x2, y2;
  529. int mx=0, my=0, time=0;
  530.  
  531.    x = 60; y = 65;
  532.    page = 0;
  533.    BSETDATAADR(ddadr,  buf);
  534.    GDS_getBlock(ddadr[0],  ddadr[1],  page, x,  y, x+396, y+151);
  535.  
  536.    helpbox( x, y, x+390, y+120, "シュードカラー・メニュー");
  537.    msgset(x, y+30, " ○ ポイント位置\x095\x05c示", col0);
  538.                                       /* 表 */
  539.    msgset(x, y+50, " ○ 拡大\x095\x05c示", col0);
  540.                               /* 表 */
  541.    msgset(x, y+70, " ○ 三次元\x095\x05c示", col0);
  542.                                     /* 表 */
  543.    msgset(x+190, y+30, " ○ 色別面積計算", col0);
  544.    msgset(x+190, y+50, " ○ ヒストグラム\x095\x05c示", col0);
  545.                                           /* 表 */
  546.    msgset(x+190, y+70, " ○ 終 了", col0);
  547.    execmsg(x+350, y+95, col0);
  548.  
  549.    while (1) {
  550.       if (time != 0) while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  551.       else time = 1;
  552.       if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 1) {
  553.          execmsg(x+350, y+95, -1);
  554.          while((MOS_rdpos(&mx, &my) & 0x01) == 1);
  555.          if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 0) {
  556.             execmsg(x+350, y+95, col0);
  557.             continue;
  558.          } else {
  559.             break;
  560.          }
  561.       }
  562.       if (com == 1)  { msgset(x+16, y+30, "●", col7); msgset(x+16, y+30, "○", col0); }
  563.       if (com == 2)  { msgset(x+16, y+50, "●", col7); msgset(x+16, y+50, "○", col0); }
  564.       if (com == 3)  { msgset(x+16, y+70, "●", col7); msgset(x+16, y+70, "○", col0); }
  565.       if (com == 4)  { msgset(x+16+190, y+30, "●", col7); msgset(x+16+190, y+30, "○", col0); }
  566.       if (com == 5)  { msgset(x+16+190, y+50, "●", col7); msgset(x+16+190, y+50, "○", col0); }
  567.       if (com == -1) { msgset(x+16+190, y+70, "●", col7); msgset(x+16+190, y+70, "○", col0); }
  568.       line(x+1, y+95, x+345, y+112, PSET, col7, 2, 0xffff);
  569.       if(xychk16(mx, my, x+16, y+30) == 1)     com = 1;
  570.       if(xychk16(mx, my, x+16, y+50) == 1)     com = 2;
  571.       if(xychk16(mx, my, x+16, y+70) == 1)     com = 3;
  572.       if(xychk16(mx, my, x+16+190, y+30) == 1) com = 4;
  573.       if(xychk16(mx, my, x+16+190, y+50) == 1) com = 5;
  574.       if(xychk16(mx, my, x+16+190, y+70) == 1) com = -1;
  575.       if (com == 1) {
  576.          msgset(x+16, y+30, "●", col0);
  577.          msgset(x+16, y+95, "カー\x083\x05cル位置\x095\x05c示をします。[5個所まで]", col0);
  578.                                 /*  ソ            表 */
  579.       }
  580.       if (com == 2) {
  581.          msgset(x+16, y+50, "●", col0);
  582.          msgset(x+16, y+95, "画像の拡大\x095\x05c示をします。[2~64倍まで]", col0);
  583.       }                                /* 表 */
  584.       if (com == 3) {
  585.          msgset(x+16, y+70, "●", col0);
  586.          msgset(x+16, y+95, "三次元画像\x095\x05c示をします。", col0);
  587.       }                                /* 表 */
  588.       if (com == 4) {
  589.          msgset(x+16+190, y+30, "●", col0);
  590.          msgset(x+16, y+95, "枠内の色別面積計算をします。", col0);
  591.       }
  592.       if (com == 5) {
  593.          msgset(x+16+190, y+50, "●", col0);
  594.          msgset(x+16, y+95, "枠内のヒストグラム\x095\x05c示をします。", col0);
  595.       }                                        /* 表 */
  596.       if (com == -1) {
  597.          msgset(x+16+190, y+70, "●", col0);
  598.          msgset(x+16, y+95, "ディザカラー\x095\x05c示を終了します", col0);
  599.                                          /* 表 */
  600.       }
  601.       while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  602.    }
  603.    GDS_putBlock(ddadr[0],  ddadr[1],  page, x,  y, x+396, y+151, PSET);
  604.    return(com);
  605. }
  606.  
  607. void pseudeerr(int warea)
  608. {
  609. char  msg[80];
  610.  
  611.    helpbox( 80, 150, 560, 220, "エラー");
  612.    if ( warea != 0 ) sprintf( msg, "作業領域 %d にエラーが発生しました。", warea);
  613.    else sprintf( msg, "作業領域にエラーが発生しました。");
  614.    msgset(96, 175, msg, col10);
  615.    msgset(96, 195, "確認ボタンを押してください。", col10);
  616.    recogin( 435, 195, 0);
  617.    return;
  618. }
  619.  
  620. void pseude2(int warea, int coln, int cl[], int th[][2])
  621. {
  622. int lin, pixel;
  623. int  mx, my, mosx=400, mosy=100, com;
  624. int  i, j, x, y, col, cx, cy, colcvt[256];
  625. unsigned char page;
  626. char swk[80], swk2[80];
  627. char wname[64];
  628. FILE *fp;
  629. unsigned char headblk[2][512], wblk[512];
  630. size_t  bsize, bn;
  631. unsigned gn, goffset;
  632. unsigned char sPage, dPage;
  633. unsigned char huge *WPTR;
  634.  
  635.    sprintf(wname, "%s\\warea%1d.lnd", workdir, warea);
  636.  
  637.    page = 1;
  638.    GDS_displayPage(page);
  639.    gout();
  640.    page = 0;
  641.    GDS_writePage(page);
  642.    gout();
  643.  
  644.    Cls;
  645.    helpbox2( 512, 0, 639, 399, "シュードカラー");
  646.    
  647.    sprintf(swk, "<%3d", th[0][0]);
  648.    symbol(538, 336, swk, 1,1, col10, 0 ,PSET);
  649.  
  650.    for (i = 0; i < coln;  i++) {
  651.       if (i < coln-1) col = col0;
  652.       else            col = col10;
  653.       sprintf(swk, "<%3d", th[i+1][0]);
  654.       if (i < 8) {
  655.          colbox(520, 324-i*20, cl[i]);
  656.          cx = 538; cy = 316-i*20;
  657.       } else {
  658.          colbox( 580, 324+160-i*20, cl[i]);
  659.          cx = 598; cy = 316+160-i*20;
  660.       }
  661.       symbol(cx, cy, swk, 1,1, col, 0 ,PSET);
  662.    }
  663.  
  664.    /* work area open */
  665.    if ((fp = fopen(wname, "rb")) == NULL) {
  666.       page = 0;
  667.       GDS_displayPage(page);
  668.       gout();
  669.       pseudeerr(warea);
  670.       return;
  671.    }
  672.    bsize = 512; bn = 1;
  673.    if (fread( headblk[0], bsize, bn, fp) != bn) {
  674.       page = 0; GDS_displayPage(page); gout();
  675.       fclose(fp); pseudeerr(warea); return;
  676.    }
  677.    if (fread( headblk[1], bsize, bn, fp) != bn) {
  678.       page = 0; GDS_displayPage(page); gout();
  679.       fclose(fp); pseudeerr(warea); return;
  680.    }
  681.    
  682.    sprintf(swk, "作業領域 %d", warea);
  683.    msgset(516,  25, swk, col0);
  684.    strmid(swk, headblk[0], 17, 15);
  685.    msgset2(516, 45, swk, col0);
  686.    msgset2(516, 55, "L  1-P  1/", col0);
  687.    msgset2(516, 65, "L400-P511", col0);
  688.    strmid(swk, headblk[0],  33, 15); /* band num */
  689.    msgset2(516, 75, swk, col0);
  690.    strmid(swk, headblk[1],  89,  7); /* date */ 
  691.    msgset2(516, 85, swk, col0);
  692.    strmid(swk, headblk[1],  97,  9); /* wrs seen sentor n */
  693.    msgset2(516, 95, swk, col0);
  694.    strmid(swk, headblk[1], 106,  7); /* -s */
  695.    msgset2(516+16, 105, swk, col0);
  696.    strmid(swk, headblk[1], 114,  9); /* wrs 表示 */
  697.    msgset2(516, 115, swk, col0);
  698.    /* strmid(swk, headblk[1], 176, 13); nasda landsat */
  699.    /* msgset2(516, 115, swk, col0); */
  700.    strmid(swk, headblk[1], 189, 15); /* seen id */
  701.    msgset2(516, 125, swk, col0);
  702.    strmid(swk, headblk[1], 209,  8); /* sensor name */
  703.    msgset2(516, 135, swk, col0);
  704.    msgset2(516, 145, "---------------", col0);
  705.    
  706.    GDS_displayPage(page);
  707.    gout();
  708.  
  709.    for (i = 0; i < coln; i++) {
  710.       for (j = th[i][0]; j <= th[i][1]; j++) colcvt[j] = cl[i];
  711.    }
  712.    
  713.    /* 表示 */
  714.    GDS_drawMode(&GDS_data, PSET);
  715.    WPTR = WAREA;
  716.    bsize = 512; bn = 1;
  717.    for (y = 0; y < 400; y++) {
  718.       if (fread( wblk, bsize, bn, fp) != bn) {
  719.          fclose(fp); pseudeerr(warea); return;
  720.       }
  721.       for (i = 0; i < 512; i+=32) {
  722.          for (x = i; x < i+32; x++) {
  723.             GDS_pointColor(&GDS_data, colcvt[ (*WPTR) = wblk[x] ]);
  724.             WPTR++;
  725.             GDS_pointFirst(&GDS_data, x, y);
  726.         /* pset(x, y, colcvt[ wblk[x] ], PSET); */
  727.          }
  728.          GDS_outputGraph(&GDS_data, &gn, &goffset);
  729.          GDS_resetData(&GDS_data);
  730.       }
  731.    }
  732.       
  733.    fclose(fp);
  734.       
  735.       /* initial set */
  736.       xpixel = 1; ypixel = 1; /* global */
  737.       lin = 1; pixel = 1;
  738.       /*  裏画面表示  */
  739.       sPage = 0; dPage = 1;
  740.       GDS_copyBlock(sPage, 512, 0, 639, 399, dPage, 512, 0, PSET);
  741.  
  742.       com = 1;
  743.       dith2exec(526, 355, col0);
  744.       calcu(600, 355, 0);
  745.       while (1) {
  746.          while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  747.          if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
  748.          if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
  749.            dith2exec(526, 355, -1);
  750.            while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  751.            if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
  752.               if ((com = pseude2menu( com)) == -1) break;
  753.               if (com == 1) {
  754.                  pointset( lin, pixel);
  755.               }
  756.               if (com == 2) {
  757.                  sizechg( lin, pixel);
  758.               }
  759.  
  760.               if (com == 3) {
  761.                  gr3d( lin, pixel);
  762.               }
  763.               if (com == 4 || com == 5) {
  764.                  areacalc( com-4, warea, lin, pixel, coln, cl, th);
  765.                  /* 裏画面修復(復帰) */
  766.                    page = 1;
  767.                    GDS_writePage(page);
  768.                    gout();
  769.                    Cls;
  770.                    /* 裏画面転送 */
  771.                    sPage = 0; dPage = 1;
  772.                    GDS_copyBlock(sPage, 512, 0, 639, 399, dPage, 512, 0, PSET);
  773.                    /* メニュー消去 */
  774.                    line( 520, 350, 638, 379, PSET, col7, 2, 0xffff);
  775.                    page = 0;
  776.                    GDS_writePage(page);
  777.                    gout();
  778.               }
  779.            }
  780.            dith2exec(526, 355, col0);
  781.            continue;
  782.          }
  783.       }
  784.  
  785.    /* tst prog
  786.       fclose(fp1); fclose(fp2); fclose(fp3);
  787.       while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  788.       while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  789.    */
  790.    page = 1;
  791.    GDS_writePage(page);
  792.    gout();
  793.    Cls;
  794.    page = 0;
  795.    GDS_writePage(page);
  796.    gout();
  797.    return;
  798. }
  799.  
  800. void pseude()
  801. {
  802. int bcl[16];
  803. int exec, com, com2, com3;
  804. int mx, my, mosx=400, mosy=100;
  805. unsigned char page;
  806. int i, j, cx, cy;
  807. int coln, cl[16], th[17][2];
  808. double  wa = 0;
  809.  
  810. coln = 16;
  811. for (i = 0; i <= 16; i++) {
  812.    cl[i] = i;
  813.    th[i][0] = 16*i; th[i][1] = 16*i+15;
  814. com  = com2 = 8;
  815. com3 = 0;
  816.  
  817. start:
  818.    page = 1;
  819.    GDS_displayPage(page);
  820.    gout();
  821.    page = 0;
  822.    GDS_writePage(page);
  823.    gout();
  824.       Cls;
  825.       mttl();
  826.       bcl[0] = col1;
  827.       paint(1,30, 1, col7,  1, bcl);
  828.       menubox( 80, 40, 560, 280, "シュードカラー画像\x095\x05c示条件設定");
  829.                                                      /* 表 */
  830.       helpbox( 80,290, 560, 360, "メッセージ");
  831.      /* line(90, 103, 250, 278, PSET, col1,  1, 0xffff); */
  832.       helpbox( 90, 63, 250, 268, "色、レベル設定");
  833.       levelset(coln, th, 1);
  834.       msgset(320, 70, " ○ 色数変更", col0);
  835.       msgset(320, 90, " ○ 作業領域1", col0);
  836.       msgset(320,110, " ○ 作業領域2", col0);
  837.       msgset(320,130, " ○ 作業領域3", col0);
  838.       msgset(320,170, " ○ 終 了", col0);
  839.       execmsg(480, 210, col0);
  840.       calcu(600, 30, 0);
  841.       wabot(600, 60, 0);
  842.  
  843.       GDS_displayPage(page);
  844.       gout();
  845.       locate(0,0,COFF);
  846.       MOS_disp(0);
  847.       exec = 0;
  848.  
  849.       while(1) {
  850. start2:
  851.          if (com  == 8) msgset(336, 90, "●", col0);
  852.          if (com  == 9) msgset(336,110, "●", col0);
  853.          if (com  ==10) msgset(336,130, "●", col0);
  854.          if (com  ==12) msgset(336,170, "●", col0);
  855.          pseudemsg(com, 1);
  856.  
  857.          if (exec == 1) {
  858.             if (8 <= com && com <= 10) {
  859.                pseude2(com-7, coln, cl, th);
  860.                goto start;
  861.             }
  862.             if (com == 12) { return; }
  863.          }
  864.          while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
  865.          if (calchk(mx, my, 600, 30, &mosx, &mosy) == 1) continue;
  866.          if (wabotchk(mx, my, 600, 60) == 1) continue;
  867.          
  868.          for (i = 0; i < coln;  i++) {
  869.             if (i<8) {
  870.                cx = 100; cy = 245-i*20;
  871.                if (xychk16(mx, my,cx, cy) == 1) {
  872.                   com3 = 2; break;
  873.                }
  874.                cx = 118; cy = 237-i*20;
  875.                if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1)  {
  876.                   com3 = 3; break;
  877.                }
  878.             } else {
  879.                cx = 180; cy = 245+160-i*20;
  880.                if (xychk16(mx, my, cx, cy) == 1) {
  881.                   com3 = 2; break;
  882.                }
  883.                cx = 198; cy = 237+160-i*20;
  884.                if ((xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1) && (i < coln-1)) {
  885.                   com3 = 3; break;
  886.                }
  887.             }
  888.          }
  889.          if (com3 == 2) {
  890.             line(cx-1, cy-1, cx+16, cy+16, PSET, col14,  1, 0xffff);
  891.             colchg(cx, cy, &cl[i]);
  892.             line(cx-1, cy-1, cx+16, cy+16, PSET, col7,  1, 0xffff);
  893.             com3 = 0;
  894.             continue;
  895.          }
  896.          if (com3 == 3) {
  897.             line(cx-1, cy-1, cx+45, cy+9, PSET, col14,  1, 0xffff);
  898.             levelchg(cx, cy, coln, th, i);
  899.             line(cx-1, cy-1, cx+45, cy+9, PSET, col7,  1, 0xffff);
  900.             com3 = 0;
  901.             continue;
  902.          }
  903.          if (xychk16(mx, my, 336, 70) == 1) {
  904.             msgset( 336, 70, "●", col0);
  905.             helpcls( 80,290, 560, 360);
  906.             pseudemsg(1, 1);
  907.             coln = colnset(coln, th);
  908.             pseudemsg(1, 0);
  909.             msgset( 336, 70, "●", col7); msgset( 336, 70, "○", col0);
  910.             continue;
  911.          }
  912.          if (xychk16(mx, my,336, 90) == 1) com = 8;
  913.          if (xychk16(mx, my,336,110) == 1) com = 9;
  914.          if (xychk16(mx, my,336,130) == 1) com =10;
  915.          if (xychk16(mx, my,336,170) == 1) com =12;
  916.          if (xychk(mx, my,480,210, 480+33, 210+18) == 1) {
  917.             execmsg(480, 210, -1);
  918.             while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
  919.             if (xychk(mx, my, 480, 210, 480+33, 210+18) == 1) {
  920.                exec = 1;
  921.                continue;
  922.             } else {
  923.                exec = 0;
  924.                execmsg(480, 210, col0);
  925.                continue;
  926.             }
  927.          }
  928.          if (com != com2) {
  929.             if (com2 == 8) { msgset(336, 90, "●", col7); msgset(336, 90, "○", col0); }
  930.             if (com2 == 9) { msgset(336,110, "●", col7); msgset(336,110, "○", col0); }
  931.             if (com2 ==10) { msgset(336,130, "●", col7); msgset(336,130, "○", col0); }
  932.             if (com2 ==12) { msgset(336,170, "●", col7); msgset(336,170, "○", col0); }
  933.             psmsgcls();
  934.             com2 = com;
  935.          }
  936.       }
  937. }
  938.  
  939.